package com.ht.demo.service.manager.system;

import com.ht.demo.common.appexception.AppException;
import com.ht.demo.common.pojo.bo.system.SysMenuBO;
import com.ht.demo.common.pojo.qto.system.SysMenuQTO;
import com.ht.demo.common.pojo.vo.RouterVo;
import com.ht.demo.common.pojo.vo.TreeSelect;

import java.util.List;

/**
 * 菜单查询服务接口
 */
public interface SelectMenuManager {

    /**
     * 根据菜单ID获取菜单详情
     * @param sysMenuId
     * @return
     * @throws AppException
     */
    SysMenuBO selectMenuById(Long sysMenuId) throws AppException;

    /**
     * 根据当前登录用户查询菜单列表
     * 菜单列表数据
     * @return
     */
    List<SysMenuBO> selectMenuList(SysMenuQTO qto) throws AppException;

    /**
     * 根据角色查询菜单树
     * @param sysRoleId
     * @return
     * @throws AppException
     */
    List<SysMenuBO> selectMenuListByRoleId(Long sysRoleId) throws AppException;

    /**
     * 根据用户ID，查询该用户的菜单列表
     * @param sysUserId
     * @return
     * @throws AppException
     */
    List<SysMenuBO> selectMenuListByUserId(Long sysUserId) throws AppException;

    /**
     * 重要，将菜单转为树结构
     * 返回的是树型结构数据
     * @param menus
     * @return
     * @throws AppException
     */
    List<SysMenuBO> buildMenuTree(List<SysMenuBO> menus) throws AppException;

    /**
     * 转为仅返回前端需要的数据
     * 将树结构转为前需要的内容
     * @param menus
     * @return
     * @throws AppException
     */
    List<TreeSelect> buildTreeSelect(List<SysMenuBO> menus) throws AppException;

    /**
     * 获取前端需要的路由信息
     * 传入的是树形结构的菜单集合
     * @param menuTree
     * @return
     * @throws AppException
     */
    List<RouterVo> getRouters(List<SysMenuBO> menuTree) throws AppException;

}
